Getting Started
This guide will help you set up and run the FF-API-External service locally for development and testing purposes.
Table of Contents
- Prerequisites
- Installation
- Configuration
- Running the Service
- API Testing
- Development Workflow
- Troubleshooting Installation
Prerequisites
Before setting up FF-API-External, ensure you have the following prerequisites installed:
Required Software
- Python 3.11.9 (as specified in
runtime.txt) - MySQL (5.7 or newer)
- MongoDB (4.0 or newer)
- Git (for cloning the repository)
Required API Keys
You'll need API keys for the various third-party services:
- OpenAI (ChatGPT)
- Anthropic (Claude)
- SERP API
- Google Maps
- Paystack
- And others as needed for your specific use case
Installation
Clone the Repository
git clone https://github.com/yourusername/ff-api-external.git
cd ff-api-external
Create a Virtual Environment
# Create a virtual environment using the correct Python version
python3.11 -m venv venv
# Activate the virtual environment
# On Windows:
venv\Scripts\activate
# On macOS/Linux:
source venv/bin/activate
Install Dependencies
pip install -r requirements.txt
Configuration
Environment Variables
Create a .env file in the root directory with your configuration variables. Use the provided .env file as a template:
cp .env.example .env # If .env.example exists
# Or create a new .env file manually
Edit the .env file with your specific configuration values:
# Database configurations
MYSQL_HOST=localhost
MYSQL_USER=your_mysql_user
MYSQL_PASSWORD=your_mysql_password
MYSQL_DB=main
MYSQL_CURSORCLASS=DictCursor
MYSQL_PORT=3306
# MongoDB configurations
MONGODB_MAIN_PROD=mongodb://localhost:27017/gateway
# API keys for various services
CHAT_GPT_API_KEY=your-openai-api-key
CLAUDE_API_KEY=your-claude-api-key
# ... other API keys as needed
Database Setup
MySQL Database
- Create the MySQL database:
CREATE DATABASE main;
- Create a MySQL user with appropriate permissions:
CREATE USER 'your_mysql_user'@'localhost' IDENTIFIED BY 'your_mysql_password';
GRANT ALL PRIVILEGES ON main.* TO 'your_mysql_user'@'localhost';
FLUSH PRIVILEGES;
- Import the database schema (if provided):
mysql -u your_mysql_user -p main < schema.sql
MongoDB Database
- Start the MongoDB service if it's not already running:
# On Linux
sudo systemctl start mongod
# On macOS with Homebrew
brew services start mongodb-community
- Create the necessary MongoDB database and collections:
// Connect to MongoDB
mongo
// Create the database
use gateway
// Create collections as needed
db.createCollection("gsmarena_brands")
db.createCollection("gsmarena_devices")
// ... other collections as needed
Certificate Files
The repository includes certificate files for MongoDB:
ca-certificate.crtmongodb-1-cert.crt
Ensure these files are in the correct location and have the proper permissions.
Running the Service
Development Server
For local development, you can use the built-in Flask development server:
python server.py
This will start the server on port 5060 with debug mode enabled, as specified in server.py.
Using Gunicorn (Production-like)
For a more production-like environment, you can use Gunicorn:
gunicorn --config gunicorn_config.py wsgi:app
This will start the server on port 8080 as configured in gunicorn_config.py.
Using Docker (Optional)
If you prefer to use Docker for development:
- Build the Docker image:
docker build -t ff-api-external .
- Run the container:
docker run -p 8080:8080 --env-file .env ff-api-external
API Testing
Using Curl
You can test the API endpoints using curl:
# Test a simple endpoint
curl -X GET "http://localhost:5060/api/v1/gsmarena/brands"
# Test an endpoint with parameters
curl -X POST "http://localhost:5060/api/v1/claude/prompt" \
-d "prompt=Tell me about AI" \
-d "max_tokens=1000" \
-d "temperature=0.7"
Using Postman
Postman provides a more user-friendly interface for API testing:
- Import the API collection (if provided) or create a new collection
- Configure environment variables for base URL and authentication
- Create requests for each endpoint you want to test
- Send requests and examine responses
Using Python Requests
You can also test the API using Python's requests library:
import requests
# Test a simple endpoint
response = requests.get("http://localhost:5060/api/v1/gsmarena/brands")
print(response.json())
# Test an endpoint with parameters
data = {
"prompt": "Tell me about AI",
"max_tokens": 1000,
"temperature": 0.7
}
response = requests.post("http://localhost:5060/api/v1/claude/prompt", data=data)
print(response.json())
Development Workflow
Adding a New Endpoint
To add a new endpoint:
- Identify the appropriate blueprint in the
view/api/directory - Add a new route handler function:
@blueprint_name.route('/api/v1/your/endpoint', methods=['GET'])
@cross_origin()
def api_v1_your_endpoint():
try:
# Implementation...
return resp.returnResponse(200, result)
except Exception as e:
return resp.returnResponse(400, f"Error: {str(e)}")
- Implement the required functionality in the appropriate service model
Adding a New Service Integration
To add a new third-party service integration:
- Create a new service model in the
models/directory - Create a new route blueprint in the
view/api/directory - Register the blueprint in
server.py
Code Style and Best Practices
- Follow PEP 8 for Python code style
- Use docstrings to document functions and classes
- Add appropriate error handling
- Use the
JsonResponseutility for consistent response formatting - Implement input validation using the
Validationutility - Use environment variables for configuration
Troubleshooting Installation
Common Issues
ModuleNotFoundError
ModuleNotFoundError: No module named 'module_name'
Solution: Ensure you have activated the virtual environment and installed all dependencies:
source venv/bin/activate
pip install -r requirements.txt
Database Connection Errors
OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (10061)")
Solution: Ensure MySQL server is running and the connection details in .env are correct.
API Key Errors
APIError: Authentication error: Invalid API key
Solution: Check that you have set the correct API keys in the .env file.
Port Already in Use
OSError: [Errno 98] Address already in use
Solution: Change the port in server.py or stop the process using the current port:
# Find the process using the port
lsof -i :5060 # Linux/macOS
netstat -ano | findstr :5060 # Windows
# Kill the process
kill -9 <PID> # Linux/macOS
taskkill /F /PID <PID> # Windows
Additional Support
If you encounter issues not covered here, check the Troubleshooting guide for more detailed information.